﻿using System.Collections.Generic;
using System.Linq;

namespace Beeflys.Generator
{
    static class UnitTypeInfoExtensions
    {
        public static bool IsObjectType(this UTypeInfo typeInfo)
        {
            return typeInfo.FullName == "System.Object";
        }

        public static bool IsBaseTypeOrKeyword(this UTypeInfo typeInfo)
        {
            return typeInfo.IsBaseTypeKeyword() || typeInfo.IsBaseType();
        }

        public static bool IsBaseTypeKeyword(this UTypeInfo typeInfo)
        {
            string fullName = typeInfo.FullName;
            return SystemType.keywords.Contains(fullName);
        }

        public static bool IsBaseType(this UTypeInfo typeInfo)
        {
            string fullName = typeInfo.FullName;
            return SystemType.baseTypes.Contains(fullName);
        }

        public static string GetTypeFullNameFromKeyword(this UTypeInfo typeInfo)
        {
            string text = typeInfo.FullName;
            return SystemType.defaultTypeMap[text];
        }
        
        
        




        // public static List<UTypeInfo> GetAllInterfaces(this UTypeInfo typeInfo)
        // {
        //     var interfaces = new Dictionary<string, UTypeInfo>();
        //     GetInterfaces(typeInfo, interfaces);
        //     
        //     return interfaces.Values.ToList();
        // }
        //
        // private static void GetInterfaces(UTypeInfo typeInfo,  Dictionary<string, UTypeInfo> interfaces)
        // {
        //     if (typeInfo.IsInterface)
        //     {
        //         var fullName = typeInfo.FullName;
        //         if (!interfaces.ContainsKey(fullName))
        //         {
        //             interfaces.Add(fullName, typeInfo);    
        //         }
        //
        //         RecursiveSearch(typeInfo);
        //     }
        //     else
        //     {
        //         var tempType = typeInfo;
        //         while (tempType != null && !tempType.IsObjectType())
        //         {
        //             var temps = tempType.GetBaseInterfaces();
        //             foreach (var item in temps)
        //             {
        //                 RecursiveSearch(item);
        //             }
        //             
        //             tempType = tempType.GetBaseType();
        //         }
        //     }
        //
        //     void RecursiveSearch(UTypeInfo typeInfo)
        //     {
        //         var items = typeInfo.GetBaseInterfaces();
        //         foreach (var item in items)
        //         {
        //             GetInterfaces(item, interfaces);
        //         }
        //     }
        // }
    }
}
